# 实现简化版 “人生重开模拟器”

"""
步骤:
    1. 游戏开始的时候，设定初始属性-> 颜值、体质、智力、家境
    2. 开始游戏，随机生成性别和出生点
    3. 针对每一年，都生成人生的经历-> (依靠一定的随机因素 + 当前角色的属性)

在实现一个游戏的时候，很多时候，游戏本身涉及到的逻辑，并不复杂。
但是游戏中一些具体的数据，数值平衡，是非常复杂的。

家境分成几档，每个挡位有几种情况，具体怎么分？
出生点的判定都要考虑哪些因数.......

"""
import random
import sys
import time

# 打印游戏界面
print('+--------------------------------------+')
print('|                                      |')
print('|       花重开日，人无再少年              |')
print('|                                      |')
print('|                                      |')
print('|      欢迎来到，人生重开模拟器            |')
print('|                                      |')
print('+--------------------------------------+')

# 设置初始属性
# 颜值、体质、智力、家境，总和不能超过20，每一项都是在1~10之间
# 使用循环，可以使玩家在输入错误的时候，可以重新输入
while True:
    print("请设置初始属性 (您可用点数总数为20):")
    face = int(input("请输入颜值(1~10):"))
    strong = int(input("请输入体质(1~10):"))
    iq = int(input("请输入体质(1~10):"))
    home = int(input("请输入家境(1~10):"))
    # 通过条件语句，对于用户输入的属性值做出校验检查

    if face < 1 or face > 10:
        print("你的颜值输入有误")
        continue
    if strong < 1 or strong > 10:
        print("你的体质输入有误")
        continue
    if iq < 1 or iq > 10:
        print("你的智力输入有误")
        continue
    if home < 1 or home > 10:
        print("你的家境输入有误")
        continue
    if (face + strong + iq + home) > 20:
        print("总的属性和超出了20，你的设置有误")
        continue
    # 如果上面的条件都没有被触犯，则认为玩家输入的数据是有效的
    # 此时就可以跳出循环了
    print("你的初始属性输入完毕！")
    print(f"颜值：{face};体质：{strong};智力：{iq};家境：{home}")
    break
"""
   这段逻辑，使用 elif 是否可以呢？  完全可以的，效果时相同的
使用elif，则时多个分支只能进一个，一旦某个条件满足了，就不会再走其他分支了，
此处虽然没有使用elif，但是有了continue,一但某个条件满足，continue就会使循环从头再来，
也就没有机会继续执行后续的条件了。
"""

# 生成角色性别
"""
使用random.randint(beg, end)，就能生成[beg,end]的随机整数  -> 导入 import random

random 是一个Python中的一个模块-> 别人写好的代码，直接给我们来用

在Python中，如果想引用其他模块，就需要先用 import语句，把模块的名字给“导入”进来 
"""
point = random.randint(1, 6)
if point % 2 == 1:
    gender = 'boy'
    print("这时你出生了，你是个男孩")
if point % 2 == 0:
    gender = 'girl'
    print("这时你出生了，你是个女孩")

# 设定角色的出身点

"""
  家境 + 随机数：
        家境 10  第一挡， 带来一些属性加成
        家境 7~9 第二档， 也会带来些属性加成
        家境 4~6 第三挡， 少数属性加成
        家境 1~3 第四挡， 会扣属性
"""

# 为了简单，就直接生成1~3的随机数

point2 = random.randint(1, 3)
if home == 10:
    # 第一档
    print('你出生在帝都，你的父母都是高管要政')
    home += 1
    iq += 1
    face += 1
elif 7 <= home <= 9:
    # 第二档
    if point2 == 1:
        print("你出生在大城市，父母是公务员")
        face += 2
    elif point2 == 2:
        print("你出生在大城市，父母是企业高管")
        home += 2
    elif point2 == 3:
        print("你出生在大城市，父母是大学教授")
        iq += 2
elif 4 <= home <= 6:
    # 第三挡
    if point2 == 1:
        print("你出生在三线城市，父母是医生")
        strong += 1
    elif point2 == 2:
        print("你出生在镇上，父母是老师")
        iq += 1
    else:
        print("你出生在镇上，父母都是个体户")
        home += 1
elif 1 <= home <= 3:
    # 第四挡
    if point == 1:
        print("你出生在农村，父母都是辛苦劳作的农民")
        strong += 1
        face -= 2
    elif point == 2:
        print("你出生在穷乡僻壤，父母是无业游民")
        home -= 1
    else:
        print("你出生在镇上，父母感情不和")
        strong -= 1
print(f"颜值：{face};体质；{strong};智力：{iq};家境：{home}")

# 4. 针对每一岁，生成人生经历

"""
按照年龄，把人生经历分成四个阶段：
        1. 幼年阶段[1~10]       可塑性比较强
        2. 青年阶段[11~20]      求学  家庭可能有变化
        3. 壮年阶段[21~50]      平稳
        4. 老年阶段 50岁以上     颜值和体质和智力显著退化
"""
# 幼年阶段
'''
 先使用一个循环。按照年龄，从1~10
 针对每一年，都生成一个随机数~ [1~3]
 根据角色、性别、年龄，各种属性，触发各种事件，随机数都会对事件的结果造成影响
 这里的事件可能会对属性带来变更
 每一年执行结束，都打印这一年发生的事件(让每一年只发生一个事件)  使用 if~ elif 来进行
 也可能会遇到夭折的情况，使用exit函数来结束程序。
 '''

for age in range(1, 11):
    # 把一年的事件都打印到一个字符串里，在这一年的结尾打印
    info = f'你今年{age}岁'
    # 生成一个[1~3]的随机数
    point3 = random.randint(1, 3)
    # 接下来编写各种事件
    # 性别触发的事件
    if gender == 'girl' and home <= 3 and point3 == 1:
        info += '你的家里人重男轻女是想非常严重，你被遗弃了!'
        print(info)
        print('游戏结束!')
        sys.exit(0)  # 需要导入 sts
    # 体质触发的事件
    elif strong <= 6 and point3 < 3:
        info += '你生病了'
        if home >= 5:
            info += '在父母的悉心照料下，你康复了'
            strong += 1
            home -= 1
        else:
            info += '你的父母没有经历管你，你的身体状况更糟糕了'
            strong -= 1
    # 颜值触发的事件
    elif face <= 4 and age >= 7:
        info += '你长的太丑了，别的小朋友不喜欢你'
        if iq >= 5:
            info += '你觉得用学习改变自己!'
            iq += 1
        else:
            if gender == 'boy':
                info += '你和别的小朋友经常打架!'
                strong += 1
                iq -= 1
            else:
                info += '你经常被别的小朋友欺负!'
                strong -= 1
                # 智商触发的事件
    elif iq < 5:
        info += '你看起来傻傻的'
        if home >= 8 and age >= 6:
            info += '你的父母把你送到更好的学校学习'
            iq += 1
        elif 4 <= home < 7:
            if gender == 'boy':
                info += '你的父母鼓励你多运动，争取成为运动员'
                strong += 1
            else:
                info += '你的父母鼓励你多打扮自己'
                face += 1
        else:
            # 家世 < 4
            info += '你的父母为此经常吵架'
            if point3 == 1:
                strong -= 1
            elif point3 == 2:
                iq -= 1
            else:
                pass  # 空语句，不发生任何事情
    # 健康成长事件
    else:
        info += '你健康成长'
        if point3 == 1:
            info += '你看起来更结实了'
            strong += 1
        elif point3 == 2:
            info += '你看起来更好看了'
            face += 1
        else:
            # 无事发生
            pass

    # 打印这一年发生的事情
    print(info)
    print(f'颜值：{face};体质：{strong};智力：{iq};家境：{home}')
    print('---------------------------------------------------')
    # 为了方便观察，加一个小小的暂停操作
    time.sleep(2)  # 让程序停一会在继续执行，2是值暂停2秒
